package chapter07

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test12_Der
 * Package: chapter07
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-28
 *          Time: 19:37
 */

//衍生集合
object Test12_Der {
  def main(args: Array[String]): Unit = {

    val list1 = List(1,2,3,45,34)
    val list2 = List(2,356,23,544)

    //1.获取集合的头 一般有序才去考虑头尾之间的关系
    //底层是一个迭代器遍历 直接获取第一个元素
    println(list1.head)

    //尾 丢掉头 剩下的都是尾
    //List(2, 3, 45, 34) head和tail最后返回的是一个集合 主要在tail体现
    println(list1.tail)

    //直接获取最后一个元素
    println(list1.last) //34

    //集合初始数据 不包括最后一个 的都是初始元素
    println(list1.init) //List(1, 2, 3, 45)

    //反转
    println(list1.reverse)

    //取前n个元素
    println(list1.take(3))//List(1, 2, 3)
    //取后n个元素
    println(list1.takeRight(2))//List(45, 34)

    //去掉前(后)几个元素
    println(list1.drop(3))   //List(45, 34)
    println(list1.dropRight(2))  //List(1, 2, 3)

    //两个集合的操作
    //8.并集 和三冒号 效果一样 直接连接一起来
    val union = list1.union(list2)
    println(union)
    println(list1 ::: list2)

    //如果是Set并会去重
    val set1 = Set(1,2,3,45)
    val set2 = Set(12,1,34)
    val set = set1.union(set2)
    println(set) //Set(1, 2, 34, 45, 12, 3)
    println(set1 ++ set2) //效果等同

    println("------------------------")
    //交集 取公共元素就是交际
    val inter = list1.intersect(list2)
    println(inter)

    //差集 删除一样的 保留不一样的
    val dif = list1.diff(list2)
    val dif2 = list2.diff(list1)
    println(dif)
    println(dif2)

    //拉链 同一位置上的元素一一配对成一个二元组 多的元素直接丢弃
    println("zip: " + list1.zip(list2))
    //List((1,2), (2,356), (3,23), (45,544))
    println("zip2: " + list2.zip(list1))
    //List((2,1), (356,2), (23,3), (544,45))

    println("---------------------")
    //滑窗
    println(list1.sliding(3)) //<iterator>
    //表示三个数为一组 滑到最后 可以有第二个参数 步长 默认是1
    for (elem <- list1.sliding(3)) println(elem)
    //List(1, 2, 3)
    //List(2, 3, 45)
    //List(3, 45, 34)





  }
}
